package com.zyf.concurrency.chapter16;

/**
 * 如果在程序中没有包含足够的同步，那么可能产生奇怪的结果（不要这么做）
 * 引自原文：
 *      PossibleReordering是-一个 简单程序，但要列举出它所有可能的结果却非常困难。内存级的
 * 重排序会使程序的行为变得不可预测。如果没有同步，那么推断出执行顺序将是非常困难的，
 * 而要确保在程序中正确地使用同步却是非常容易的。同步将限制编译器、运行时和硬件对内存
 * 操作重排序的方式，从而在实施重排序时不会破坏JMM提供的可见性保证。
 * 日
 * create by yifeng
 */
public class PossibleReordering {
    static int x = 0, y = 0;
    static int a = 0, b = 0;

    public static void main(String[] args) throws InterruptedException {
        Thread one = new Thread(() -> {
                a = 1;
                x = b;
        });

        Thread other = new Thread(() -> {
            b = 1;
            y = a;
        });

        one.start(); other.start();
        one.join(); other.join();
        System.out.println("( " + x + "," + y + " )");
    }
}
